package com.bsj.sipgateway.web.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bsj.power.common.def.entity.Scene;
import com.bsj.power.common.def.entity.gb28181.Device;

import java.util.List;

/**
 * @Description
 * @Author zhaoyang
 * @Date 2024/5/11 14:40
 */
public interface ISceneService {

    /**
     * 添加场景
     *
     * @param scene
     */
    Scene add(Scene scene);

    /**
     * 判断名称是否存在
     *
     * @param sceneName
     * @return
     */
    boolean existsByName(String sceneName);

    /**
     * 更新场景信息
     *
     * @param scene
     */
    boolean update(Scene scene);

    /**
     * 根据id查询场景信息
     *
     * @param sceneId
     * @return
     */
    Scene findById(Integer sceneId);

    /**
     * @param sceneId
     * @param dids
     * @return: void
     * @decription 场景和设备绑定
     * @author zhaoyang
     * @date 2024/5/13 9:24
     */
    void updateSceneIdByIds(Integer sceneId, Long[] dids);

    /**
     * 场景和设备解绑
     *
     * @param sceneId
     * @param did
     */
    void unbindVideoDevice(Integer sceneId, Long did);

    /**
     * @param sceneId
     * @return: void
     * @decription 删除场景
     * @author zhaoyang
     * @date 2024/5/13 14:21
     */
    void deleteScene(Integer sceneId);

    /**
     * 根据场景id查询设备列表
     *
     * @param sceneId
     * @return
     */
    List<Device> listVideoDevicesBySceneId(Integer sceneId);


    IPage<Scene> pageQuerySceneList(Integer page, Integer size, Integer isSensitived);

    /**
     * 查询所有场景信息
     *
     * @return
     */
    List<Scene> findAllScene();

    /**
     * 根据名称模糊搜索场景信息
     *
     * @param sceneName
     * @return
     */
    List<Scene> vagueSearchForSceneName(String sceneName);

    /**
     * 根据场景id查询场景信息
     *
     * @param sceneIds
     * @return
     */
    List<Scene> selectScenesByIds(List<Integer> sceneIds);


    IPage<Device> listDeviceBySceneIdAndCondition(Integer sceneId, String condition, Integer pageNumber, Integer pageSize);

    /**
     * 批量查询场景信息
     *
     * @param sceneIds
     * @return
     */
    List<Scene> findByIds(List<Integer> sceneIds);

    /**
     * 查询所有的敏感区域
     *
     * @return
     */
    List<Scene> findSensitiveScene();

    /**
     * 根据名称查询场景信息
     *
     * @param sceneName
     * @return
     */
    Scene findBySceneName(String sceneName);

    /**
     * 获取当前场景的所有下级或上级场景id（包括本身）
     *
     * @param sceneId
     * @param type    1:上级 2:下级
     * @return java.util.List<java.lang.Integer>
     * @author ljx
     * @time 2024/9/5 16:07
     */
    List<Integer> getSceneIds(Integer sceneId, Integer type);

    /**
     * 根据场景的父id查询子级场景的id
     *
     * @param sceneId
     * @return
     */
    List<Integer> selectSceneIdByPid(Integer sceneId);

    /**
     * 根据building获取场景列表
     *
     * @param i
     * @return
     */
    List<Scene> selectSceneSByBuilding(int i);

    /**
     * 查询下级所有的场景不包含自己
     *
     * @param sceneId 场景id
     * @return
     */
    List<Scene> findSubSceneList(Integer sceneId);
}
